package com.lyp.lease.web.admin.test;

import com.baomidou.mybatisplus.generator.FastAutoGenerator;
import com.baomidou.mybatisplus.generator.config.OutputFile;
import com.baomidou.mybatisplus.generator.engine.VelocityTemplateEngine;

import java.util.Collections;

public class CodeGenerator1 {

        public static void main(String[] args) {
            // ========== 1. 数据库连接配置 ==========
            String url = "jdbc:mysql://192.168.40.100:3306/lease?useSSL=false&serverTimezone=UTC";
            String username = "root";
            String password = "123456";
            // D:\Desktop\code\Project\lease\web\web-admin\src\main\java\com\lyp\lease\web\admin\controller
            // ========== 2. 项目路径与输出目录 ==========
            String projectPath = System.getProperty("user.dir"); // 项目根目录
            String mainJavaDir = projectPath + "\\web\\web-admin\\src\\main\\java"; // 主代码输出到 web-admin 的 src/main/java
            String resourcesDir = projectPath + "\\web\\web-admin\\src\\main\\resources"; // 资源文件（Mapper XML）输出目录
            System.out.println(mainJavaDir);
            FastAutoGenerator.create(url, username, password)
                    // ========== 3. 全局配置 ==========
                    .globalConfig(builder -> {
                        builder.author("lyp") // 生成代码的作者
                                .enableSwagger() // 开启 Swagger 注解（需引入 swagger 依赖）
                                .fileOverride() // 覆盖已存在的生成文件
                                .outputDir(mainJavaDir); // 主代码输出目录
                    })
                    // ========== 4. 包配置 ==========
                    .packageConfig(builder -> {
                        builder.parent("com.lyp.lease.web.admin") // 父包名：对应目录 com/lyp/lease/web/admin
                                .controller("controller") // Controller 层包名 → com/lyp/lease/web/admin/controller
                                .mapper("mapper") // Mapper 接口包名 → com/lyp/lease/web/admin/mapper
                                .service("service") // Service 接口包名 → com/lyp/lease/web/admin/service
                                .serviceImpl("service.impl") // Service 实现类包名 → com/lyp/lease/web/admin/service/impl
                                //.vo("vo") // VO 包名 → com/lyp/lease/web/admin/vo
                                // Mapper XML 文件输出到 resources/mapper 目录
                                .pathInfo(Collections.singletonMap(OutputFile.xml, resourcesDir + "/mapper"));
                    })
                    // ========== 5. 策略配置（表、各层生成规则） ==========
                    .strategyConfig(builder -> {
                        builder.addInclude("apartment_%"
                                        ,"attr_%"
                                        ,"browsing_%"
                                        ,"city_%","district_%","facility_%","fee_%","graph_%"
                                        ,"label_%","lease_%","payment_%","province_%","room_%"
                                        ,"system_%","user_%","view_%") // 需要生成代码的数据库表名（可多个）
                                .addTablePrefix("t_", "sys_") // 过滤表前缀（如 t_user → User）
                                // 【实体类策略】
                                .entityBuilder()
                                .enableLombok() // 开启 Lombok（自动生成 getter/setter 等）
                                .enableTableFieldAnnotation() // 为表字段添加注解（如 @TableField）
                                // 【Controller 策略】
                                .controllerBuilder()
                                .enableRestStyle() // 生成 @RestController（REST 风格）
                                .enableHyphenStyle() // URL 转连字符风格（如 /userInfo → /user-info）
                                // 【Service 策略】
                                .serviceBuilder()
                                .formatServiceFileName("%sService") // Service 接口名格式（如 IUserService → UserService）
                                .formatServiceImplFileName("%sServiceImpl") // Service 实现类名格式
                                // 【Mapper 策略】
                                .mapperBuilder()
                                .enableMapperAnnotation() // 生成 @Mapper 注解
                                .formatMapperFileName("%sMapper") // Mapper 接口名格式
                                .formatXmlFileName("%sMapper"); // Mapper XML 文件名格式
                    })
                    // ========== 6. 模板引擎（默认用 Velocity） ==========
                    .templateEngine(new VelocityTemplateEngine())
                    // ========== 7. 执行生成 ==========
                    .execute();

            System.out.println("代码生成完成！");
        }

}
